<?php namespace app\wechat\controller;

use houdunwang\route\Controller;
use houdunwang\wechat\WeChat;
use system\model\Keywords;
use system\model\Module;
use system\model\Config;

/*
 * 微信通讯类
 */
class Api extends Controller{
	public function __construct()
	{
		//验证微信通讯,在与微信通讯验证之前，需要注意：在中间件中进行Config::set('wechat')，这一步动作
		WeChat::valid();
	}
//动作
	public function handler(){
		//此处书写代码...
		//在浏览器访问该方法，测试是否能正常输出
		//可以看到1，把地址栏的链接，复制放在微信公众号，后台基本配置，修改配置中url
		//echo 1;
		//测试消息发送
//		$instance =WeChat::instance('message');
//		$instance->text('你好，18年的坚持...');
//		$instance->text($instance->Content);
//		1·实例化hd中的微信sdk中message类
		$instance=WeChat::instance('message');
		//2·在config表中回去字段为wechat_system_response值
		$wechat_system_response= Config::find(1)->wechat_system_response;
		//3·将其转为数组格式
		//{"csrf_token":"","welcome":"gdfg","default_message":"www"}
		$wechat_system_response = json_decode($wechat_system_response,true);
		//4·判断是否是关注事件
		if ($instance->isSubscribeEvent())
		{
			//向用户回复消息
			$instance->text($wechat_system_response['welcome']);
		}
		//5·调用粉丝回复的消息内容
		$content=$instance->Content;
//		6·将粉丝的消息传到parsekeywords()的方法中进行判断看是否能找到相应的关键词乳沟能够找到就回复过去，在这里调用回复消息的公共部分parsewords()函数
		$this->parseKeywords($content);
		//默认回复
		//在config表中回去字段为wechat_system_response值
//	$wechat_system_response=Config::find(1)->wechat_system_response;
			//将查找到的数据进行转换成为数组的形式
//		$wechat_system_response=json_decode($wechat_system_response,true);
		//然后获得的是这条数据的default_message的信息
//		将获得的default_message的信息进行传导关键字的转换中，看是否是数据中的关键字；
		//7·如果找不到就进行的是回复默认回复消息；如果你默认回复消息，恰好是一个关键词，那么当你随便输入的时候，回复该关键词对应的内容(在parseKeywords的函数中进行)
		$this->parseKeywords($wechat_system_response['default_message']);
		//8.看是否是菜单的点击事件
		//houdunwang/wechat替换
		//9.若是点击事件的话，就应该先进行实例化button这个类
		$button = WeChat::instance('button');
		//10.判断粉丝点击的消息是否是关键字，如果是就恢复相应的消息；
		if ($button->isClickEvent()) {
//			//获取消息内容
			file_put_contents('./aaa.php',var_export($content));
//			//向用户回复消息
			//$instance->text("点击了菜单,EventKey: {$instance->EventKey}");
			$this->parseKeywords($instance->EventKey);
		}
		//11.以上的情况都不是了就回复给粉丝默认的消息去除默认消息进行恢复给粉丝
		$instance->text($wechat_system_response['default_message']);
		//如果粉丝数去的不是一个关键字，那默认回复就是回复的config表中的默认回复的字段内容
//		$instance->text($wechat_system_response['default_message']);
//		file_put_contents('./log/error.log',45454);
	//	$instance->text($content);
		//$instance->text('后盾人收到你的消息了...:' . $instance->Content);
//		var_dump($content);die();
		//到关键词的表中去搜索看是否有分析法的关键词
		//$keywords=Keywords::where('keywords',$content)->first();
//		$keywords=Keywords::where('keywords',$content)->first();
//		$instance->text($keywords);
		//['kid'=>16,''keywords'=>'a','module_id'=>15,'module'=>'base']
//		if($keywords){
//			//说明找到了与粉丝发送的关键字的数据了
//			//在手机中进行测试微信是否正常
//			$instance->text('现在可以在手机上进行测试了哈哈');
			//然后还要看一下是否是系统模块
//			$instance->text('在这里可以');
//			$module=Module::where('keywords',$content)->first();
//			$module = Module::where( 'module_name' , $keywords[ 'module' ] )->first();
//			$instance->text('这里可以');
			//下面就是一个分流部分，先要进行判断是否是系统模块还是addons；
			//['id'=>16,'module_title'=>'微信','module_name'=>'base','module_is_system'=>1]
			//$class = new \module\base\system\Processor()
//			$class=($module['module_is_system']==1 ? 'module' :'addons').'\\'.$module['module_name'].'\system\Processor';
//			$instance->text($class);
//			return call_user_func_array([new $class,'handler'],[$keywords['module_id']]);
//
//		}
	}//handler 结束
	//关键字转换函数开始
	public function parseKeywords($content){
//		$instance = Wechat::instance( 'message' );
		//首先这里进行测试返回粉丝发来的消息
//		$instance->text($content);//这里能够测试成功
		//然后到数据表中去寻找数据看粉丝发送的是否是关键字
//		['kid','module_id','module']
		//1.首先根据传进来的粉丝的消息去关键字的数据表中进行查找然后看是否能够查找到数据
		$module=Keywords::where('keywords',$content)->first();
		//2.如果能够查找到数据就
		if($module){
			//说明能够查找到关键词
			//3.通过这条数据中的module字段到module的数据表中查找module_is_system看是否是系统模块。然后就要到模块module的表中进行查看该关键词的这一条数据中的模块名即modulel对应module表中的module_name
			$module_is_system=Module::where('module_name',$module['module'])->pluck('module_is_system');
           //然后就是实例化类了，然后实例化类后找到相应的方法，实例化微信处理器
			//$instance->text($module_is_system);
			//$class = "module\base\system\Processor"
			//$class = "addons\pic\system\Processor";
			//4.这里根据找到的字段值进行判断是否是系统模块然后进行实例化的类的命名空间的拼接，最终都是实例化的processor这个类，然后通过这个类去回复消息想微信；
			$class = ( $module_is_system == 1 ? 'module' : 'addons' ) . '\\' . $module['module'] . '\system\Processor';
			return call_user_func_array([new $class,'handler'],[$module['module_id']]);
		}
	}//关键字转换结束
}


